Typically, when a data storage system processes a request to configure a logical data storage container (e.g., a virtual volume) of a data storage system, the data storage system processes the command as an atomic operation. Thus, the data storage system either processes the request completely or not at all. The data storage system may then provide the user with a notification of the success or failure of the processing. Additionally, in the case of a failure of the processing, the data storage system may then backout any steps that were performed during the processing to restore the data storage system to a stable, pre-request-processing state.
However, when the logical data storage container is an abstraction of multiple logical data storage containers (e.g., when a virtual volume is exposed to a user as a single volume, but the virtual volume is an abstraction of multiple underlying virtual volumes), situations may arise in which the processing of a request with respect to the logical data storage container may not be performed as an atomic operation. In these situations, it may not be clear whether a command is processed successfully. Additionally, it may not be clear how to backout any steps that were performed during the operation to restore the data storage system to a stable, pre-request-processing state.
For example, if a command to increase the size of a logical data storage container is processed successfully with respect to a first underlying logical data storage container, but the command is not processed successfully with respect to a second underlying logical data storage container, the data storage system may need to make a determination whether the processing of the command was a success or a failure with respect to a logical storage container that is an abstraction of the first underlying logical data storage container and the second underlying data storage container. Additionally, in the case of the failure of the processing, the data storage system may need to make a determination whether to backout steps performed on one or more of the underlying data storage containers.